//用函数编写阶乘，返回32位寄存器类型值，采用同步周期出触发方式，每clk执行一次；
/*
输入参数：clk，rst_n，
输出参数：out
时间：2022年5月17日
制作者：FPGA制作者
*/
module funct(clk,rst_n,out);
   input clk,rst_n;
	output reg[31:0] out;
	 integer i;
	 reg [6:0] temp=1;
	
	function[31:0] factorial;
	  input [6:0]  a;
	 // reg [15:0] temp;
	   reg [7:0] i;//注意这里比a的位数大
	  begin
	 factorial=1;
	 // temp=1;
	 // factorial=1;
	  for(i=1;i<=a;i=i+1) begin
	//  if(clk) begin
	  // temp=temp+1;
		factorial=factorial*i;
		 end	
	   end  	
	 
	endfunction
	
	always@(posedge clk) begin
    if(!rst_n)begin
	  out=0;
	 end
	else  
	 // for(i=1;i<100;i=i+1) 
	 //   i=i+1;
	      begin
		 temp<=temp+1;
	    out<=factorial(temp); 
     end			
	 end
endmodule 
	    